package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 测试执行SQL语句,以及SQL注入问题
 */
public class Demo02 {
    public static void main(String[] args) {
        Connection conn=null;
        Statement stmt=null;
        try {
            //加载驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");
            //建立数据库连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时!这是Connection对象管理的一个要点!)
            //真正开发中,为了提高效率,都会使用连接池来管理连接对象!
            //(serverTimezone=Asia/Shanghai:在url后面添加,避免时差)
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?serverTimezone=Asia/Shanghai","root","123456");
            //执行相关SQL语句,返回相关结果
            //Statement容易发生SQL注入,在开发中一般不用它
            stmt=conn.createStatement();
            //String name="赵六";
            //可以写变量名
            //String sql="insert into t_user (username,pwd,regTime) value ('"+name+"','345',now())";
            //stmt.execute(sql);

            //测试SQL注入
            String sql="delete from t_user where id=5";
            stmt.execute(sql);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //一定先关stmt
            if (stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
